package cn.pro.jasmine;

import java.lang.reflect.Method;

    public class Appjasmine{
        public static void main(String[] args) throws Exception{
            // randomNumeric：随机生成指定位数的数字
            // randomAlphabetic：随机生成指定位数的字母
            // String s = RandomStringUtils.randomAlphabetic(6);
            // System.out.println(s);

            // ===============================================
            // 面向对象的思想
            // ===============================================
            // 创建 User 类的实例
            // >>> 使用 new 关键字调用 User 类的构造器得到实例 u
            User u = new User();
            // >>> 使用实例 u 的 setName 方法为 name 属性赋值为 Timor
            u.setName("Appjasmine");
            // >>> 使用实例 u 的 getName 方法获取 name 属性的值
            System.out.println(u.getName());
            // ===============================================
            // 面向对象的思想
            // ===============================================

            // 快捷键：Ctrl + Alt + V 自动生成函数返回值的对象在等号左边

            // 类的完整限定名 = 类的包名 + 类名
            // 通过类的完整限定名来加载某个类对象
            // 得到的这个 UU 相当于 User 类
            Class<?> UU = Class.forName("cn.pro.wyn.User");
            // 通过 UU（类对象） 的 newInstance 方法得到 User 类的实例
            // >>> 相当于面向对象中的  User u = new User();
            Object o = UU.newInstance();

            // 通过 UU（类对象） 的 getMethod 方法查找指定名称的方法
            Method setName = UU.getMethod("setName", String.class);
            // >>> 使用实例 o 来调用 setName 方法并为 o 的 name 属性赋值
            // >>> 相当于面向对象中的  u.setName("Timor");
            setName.invoke(o, "Appjasmine");

            // 通过 UU（类对象） 的 getMethod 方法查找名称为 getName 的方法
            Method getName = UU.getMethod("getName");
            // >>> 使用实例 o 来调用 getName 方法来获取 o 的 name 属性的值
            Object result = getName.invoke(o);

            System.out.println(result);

            Method setAge = UU.getMethod("setAge", Integer.class);
            setAge.invoke(o, 18);
            Method getAge = UU.getMethod("getAge");
            Object result1 = getAge.invoke(o);
            System.out.println(result1);
        }

    }

